# coding=utf-8
from flask import g
from flask_restful import Resource
from flask_restful.reqparse import RequestParser
from comment.modules.deal_record import DealRecord
from comment.modules import db
from comment.modules.user import User
from financial.resorces.transaction.serializer import DealRecordPaginateSerializer

class Deal_Resource(Resource):

    def get(self):
        '''交易记录的资源类'''
        rp = RequestParser()
        rp.add_argument('start') #起始时间
        rp.add_argument('end') #结束时间
        rp.add_argument('deal_type') #交易类型，初始值是0（0是全部，1是充值，2是提现，3是投资，4是收益，5是回收本金）
        rp.add_argument('curPage',required=True) #当前页号
        rp.add_argument('per_page',required=True) #每页显示的条数

        args = rp.parse_args()

        start = args.get('start')
        end = args.get('end')
        #判断有没有传值，如果没有，就给1做默认值，有的话。就要传过来的数据，并转化成int类型
        deal_type = 0 if args.get('deal_type') == None else int(args.get('deal_type'))
        cur_page = args.get('curPage')
        page_size = args.get('per_page')

        user_id = g.user_id
        user = User.query.filter(User.id == user_id).first()
        # 得到一个查询对象
        q = DealRecord.query
        #第一个过滤根据交易类型的过滤
        if deal_type > 0:
            q = q.filter(DealRecord.aType == deal_type)
        # 第二个过滤： 根据用户ID (当前用户如果是管理员，可以查询所有的，否则只能查询自己的)
        if user.role == 0:
            q = q.filter(DealRecord.aUserId == user_id)

        #第三个过滤根据起始时间和结束时间
        if start and end:
            #把数据库datatime的时间转化成date（传两个参数，一个是对象，另外一个是要转化的类型）
            q = q.filter(db.cast(DealRecord.aDate,db.DATE) >= db.cast(start,db.DATE))\
                .filter(db.cast(DealRecord.aDate,db.DATE) <= db.cast(end,db.DATE))#因为前端传的是字符串类型，所以要进行转化
        #分页
        data = q.paginate(int(cur_page), int(page_size), error_out=False)

        data = DealRecordPaginateSerializer(data).to_dict()  # 字典数据,做分页

        return {
            'msg':'success',
            'data':data
        }
